<!DOCTYPE html>
<HTML>
<HEAD><meta name="viewport" content="width=device-width, initial-scale=1">
<Title>Contour Color Scale</Title>
<link type='text/css' rel='Stylesheet' href="maxchartapi.css" />
</HEAD>
<body bgcolor="#FFFFFF" text="#000000" topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0">

<p class="heading0">ChartDirector 7.0 (Java Edition)</p>
<p class="heading1">Contour Color Scale</p>
<hr class="separator">
<div class="content">
<img src="images/contourcolor0.png" width='420' height='360'>&nbsp;&nbsp;<img src="images/contourcolor1.png" width='420' height='360'>&nbsp;&nbsp;<img src="images/contourcolor2.png" width='420' height='360'>&nbsp;&nbsp;<img src="images/contourcolor3.png" width='420' height='360'>
<br><br>
This example demonstrates using various color scales for contour charts.<br><br>
ChartDirector supports two ways to configure the color scale:<br><br>
<ul><li> The <a href="ColorAxis.setColorGradient.htm">ColorAxis.setColorGradient</a> can be used to specify a list of colors to be used for the <a href="ColorAxis.htm">ColorAxis</a>. With this method, the color scale is determined by other means, and the colors will be applied to the resulting scale, interpolating among the colors if necessary. By default, the color axis scale and labels are automatically determined based on actual data. The axis scale and labels can also be specified by using various <a href="Axis.htm">Axis</a> methods, such as <a href="Axis.setLinearScale.htm">Axis.setLinearScale</a>, <a href="Axis.setLogScale.htm">Axis.setLogScale</a> and <a href="Axis.setDateScale.htm">Axis.setDateScale</a> (please refer to <a href="Axis.htm">Axis</a> for the full list).<br><br>
<li> The <a href="ColorAxis.setColorScale.htm">ColorAxis.setColorScale</a> can be used to specify both the colors and the associated scale and labels.</ul>
This example includes 4 charts to demonstrate both of the above methods.
</div>
<p class="heading1a">Source Code Listing</p>
<div class="content">
<b>[JSP Version]</b> jspdemo/contourcolor.jsp
<div class='codeblock'><code class='pre'>&lt;%@page import="ChartDirector.*, java.util.*" %&gt;
&lt;%!
// Function to create the demo charts
void createChart(WebChartViewer viewer, int chartIndex)
{
    // The x and y coordinates of the grid
    double[] dataX = {-4, -3, -2, -1, 0, 1, 2, 3, 4};
    double[] dataY = {-4, -3, -2, -1, 0, 1, 2, 3, 4};

    // Use random numbers for the z values on the XY grid
    RanSeries r = new RanSeries(99);
    double[] dataZ = r.get2DSeries(dataX.length, dataY.length, -0.9, 0.9);

    // Create a XYChart object of size 420 x 360 pixels
    XYChart c = new XYChart(420, 360);

    // Set the plotarea at (30, 25) and of size 300 x 300 pixels. Use semi-transparent grey
    // (0xdd000000) horizontal and vertical grid lines
    c.setPlotArea(30, 25, 300, 300, -1, -1, -1, 0xdd000000, -1);

    // Set the x-axis and y-axis scale
    c.xAxis().setLinearScale(-4, 4, 1);
    c.yAxis().setLinearScale(-4, 4, 1);

    // Add a contour layer using the given data
    ContourLayer layer = c.addContourLayer(dataX, dataY, dataZ);

    // Enable contour label by setting its style to black (000000) 8pt default bold font
    layer.setContourLabelStyle("bold", 8, 0x000000);

    // Set the label to display the value in a CDML block with semi-transparent white (4FFFFFFF)
    // background and 2 pixels left/right margin and 1 pixel top/bottom margin
    layer.setContourLabelFormat("&lt;*block,bgcolor=4FFFFFFF,margin=2 2 1 1*&gt;{value}");

    // Move the grid lines in front of the contour layer
    c.getPlotArea().moveGridBefore(layer);

    // Add a color axis (the legend) in which the top left corner is anchored at (350, 25). Set the
    // length to 400 300 and the labels on the right side.
    ColorAxis cAxis = layer.setColorAxis(350, 25, Chart.TopLeft, 300, Chart.Right);

    if (chartIndex == 1) {
        // Speicify a color gradient as a list of colors, and use it in the color axis.
        int[] colorGradient = {0x0044cc, 0xffffff, 0x00aa00};
        cAxis.setColorGradient(false, colorGradient);
    } else if (chartIndex == 2) {
        // Specify the color scale to use in the color axis
        double[] colorScale = {-1.0, 0x1a9850, -0.75, 0x66bd63, -0.5, 0xa6d96a, -0.25, 0xd9ef8b, 0,
            0xfee08b, 0.25, 0xfdae61, 0.5, 0xf46d43, 0.75, 0xd73027, 1};
        cAxis.setColorScale(colorScale);
    } else if (chartIndex == 3) {
        // Specify the color scale to use in the color axis. Also specify an underflow color
        // 0x66ccff (blue) for regions that fall below the lower axis limit.
        double[] colorScale = {0, 0xffff99, 0.2, 0x80cdc1, 0.4, 0x35978f, 0.6, 0x01665e, 0.8,
            0x003c30, 1};
        cAxis.setColorScale(colorScale, 0x66ccff);
    }

    // Output the chart
    viewer.setChart(c, Chart.SVG);

    // Include tool tip for the chart
    viewer.setImageMap(c.getHTMLImageMap("", "",
        "title='&lt;*cdml*&gt;&lt;*b*&gt;X: {x|2}&lt;*br*&gt;Y: {y|2}&lt;*br*&gt;Z: {z|2}'"));

    // Output Javascript chart model to support contour chart tooltips
    viewer.setChartModel(c.getJsChartModel());
}
%&gt;
&lt;%
// This example includes 4 charts
WebChartViewer[] viewers = new WebChartViewer[4];
for (int i = 0; i &lt; viewers.length; ++i) {
    viewers[i] = new WebChartViewer(request, "chart" + i);
    createChart(viewers[i], i);
}
%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Contour Color Scale&lt;/title&gt;
    &lt;!-- Include ChartDirector Javascript Library to support chart interactions --&gt;
    &lt;script type="text/javascript" src="cdjcv.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body style="margin:5px 0px 0px 5px"&gt;
    &lt;div style="font:bold 18pt verdana;"&gt;
        Contour Color Scale
    &lt;/div&gt;
    &lt;hr style="border:solid 1px #000080; background:#000080" /&gt;
    &lt;div style="font:10pt verdana; margin-bottom:1.5em"&gt;
        &lt;a href="viewsource.jsp?file=&lt;%=request.getServletPath()%&gt;"&gt;View Source Code&lt;/a&gt;
    &lt;/div&gt;
    &lt;!-- ****** Here are the chart images ****** --&gt;
    &lt;%
        for (int i = 0; i &lt; viewers.length; ++i) {
            out.write(viewers[i].renderHTML(response));
            out.write(" ");
        }
    %&gt;
&lt;/body&gt;
&lt;/html&gt;</code></div>
</div>
<br><hr class="separator"><div class="copyright">&copy; 2022 Advanced Software Engineering Limited. All rights reserved.</div>
</body>
</HTML>
